﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using Office_12 = Microsoft.Office.Core;
using Excel_12 = Microsoft.Office.Interop.Excel;
using System.Diagnostics;  //thư viện mở ứng dụng, chạy những tập tin *.exe
using System.Data.SqlClient;
using System.Windows.Forms;


namespace BuddhistSchools.DTO
{
    public class ExcelDataProvider
    {
        public static DataTable ReadDataFromExcelFile(string duongDan)
        {
            string kt = duongDan.Substring(duongDan.LastIndexOf(".") + 1);
            string connectionString = "";
            if (kt == "xls")
            {
                connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + duongDan + ";Extended Properties=Excel 8.0";
            }
            else
            {
                connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + duongDan + ";Extended Properties=Excel 12.0";
            }
            // Tạo đối tượng kết nối
            OleDbConnection oledbConn = new OleDbConnection(connectionString);
            DataTable data = null;
            try
            {
                // Mở kết nối
                oledbConn.Open();
                // Tạo đối tượng OleDBCommand và query data từ sheet có tên "Sheet1"
                OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", oledbConn);
                // Tạo đối tượng OleDbDataAdapter để thực thi việc query lấy dữ liệu từ tập tin excel
                OleDbDataAdapter oleda = new OleDbDataAdapter();
                oleda.SelectCommand = cmd;
                // Tạo đối tượng DataSet để hứng dữ liệu từ tập tin excel
                DataSet ds = new DataSet();
                // Đổ đữ liệu từ tập excel vào DataSet
                oleda.Fill(ds);
                data = ds.Tables[0];
                // Đóng chuỗi kết nối
                oledbConn.Close();
                return data;
            }
            catch
            {
                oledbConn.Close();
                return null;
            }

        }
        ////////////Xuat Excel//////////////
        public static void ExportDataGridViewTo_Excel12(string ten, int top, DataTable dsExcel,string duongDan)
        {      
            Excel_12.Application oExcel_12 = null; //Excel_12 Application
            Excel_12.Workbook oBook = null; // Excel_12 Workbook
            Excel_12.Sheets oSheetsColl = null; // Excel_12 Worksheets collection
            Excel_12.Worksheet oSheet = null; // Excel_12 Worksheet
            Excel_12.Range oRange = null; // Cell or Range in worksheet
            Object oMissing = System.Reflection.Missing.Value;
            oExcel_12 = new Excel_12.Application();
            oExcel_12.Application.Workbooks.Add(true);
            oExcel_12.Visible = false;
            oExcel_12.UserControl = true;
            oBook = oExcel_12.Workbooks.Add(oMissing);
            oSheetsColl = oExcel_12.Worksheets;
            oSheet = (Excel_12.Worksheet)oSheetsColl.get_Item("Sheet1");
            oSheet.Name = ten;
            for (int j = 0; j < dsExcel.Columns.Count; j++)
            {
                oRange = (Excel_12.Range)oSheet.Cells[top, j + 1];
                oRange.Value2 = dsExcel.Columns[j].ColumnName;
                oRange.Font.Bold = true;
            }

            for (int i = 0; i < dsExcel.Rows.Count; i++)
            {
                for (int j = 0; j < dsExcel.Columns.Count; j++)
                {
                    oRange = (Excel_12.Range)oSheet.Cells[i + top + 1, j + 1];
                    oRange.Value2 = dsExcel.Rows[i][j];
                }
            }
            oBook.SaveAs(duongDan, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, null, null, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, false, false, false, false, false);
            oBook.Close(null, null, null);
            oExcel_12.Application.Workbooks.Close();
            oExcel_12.Quit();
            oExcel_12 = null;
            oBook = null;
            oSheetsColl = null;
            oSheet = null;
            oRange = null;  
            duongDan = duongDan + ".xls";
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.FileName = "EXCEL.EXE";
            startInfo.Arguments = duongDan;
            Process.Start(startInfo);
        }
    }
}
